package com.ruoyi.system.service;

import com.ruoyi.system.domain.MrDevice;
import com.ruoyi.system.domain.vo.MrDeviceVO;
import com.ruoyi.system.domain.vo.OverviewReponse;
import com.ruoyi.system.domain.vo.TestMuteRecordVO;
import com.ruoyi.system.domain.vo.ByCategoryVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 设备管理Service接口
 *
 * @author ruoyi
 * @date 2022-11-18
 */
public interface IMrDeviceService {

    void loadingCache();

    /**
     * 查询设备管理 缓存
     *
     * @param devId 设备管理主键
     * @return 设备管理
     */
    MrDevice getCacheDevice(String devId);

    /**
     * 查询设备管理 数据库
     *
     * @param deviceId 设备管理主键
     * @return 设备管理
     */
    MrDevice selectMrDeviceByDeviceId(Long deviceId);

    /**
     * 查询设备管理列表
     *
     * @param mrDevice 设备管理
     * @return 设备管理集合
     */
    List<MrDevice> selectMrDeviceList(MrDevice mrDevice);

    /**
     * 查询设备管理列表
     *
     * @param mrDevice 设备管理
     * @return 设备管理集合
     */
    List<MrDevice> listDevs(MrDevice mrDevice);

    /**
     * 根据输出源查询
     *
     * @param port 出源
     * @return 设备信息
     */
    MrDevice getDeviceByOutputSource(String port);

    /**
     * 485输出
     *
     * @param writeValue   输出信息
     * @param outputSource 要输出的设备
     */
    void mute(boolean writeValue, String outputSource);

    /**
     * 485输出
     *
     * @param writeValue   输出信息
     * @param systemId 要输出的设备
     */
    void muteBySystemId(boolean writeValue, String systemId);

    /**
     * 新增设备管理
     *
     * @param mrDevice 设备管理
     * @return 结果
     */
    int insertMrDevice(MrDevice mrDevice);

    /**
     * 修改设备管理
     *
     * @param mrDevice 设备管理
     * @return 结果
     */
    int updateMrDevice(MrDevice mrDevice);

    /**
     * 更新设备状态
     *
     * @param mrDevice 参数
     * @return 结果
     */
    int updateMrDeviceWarnStatus(MrDevice mrDevice);

    /**
     * 批量删除设备管理
     *
     * @param deviceIds 需要删除的设备管理主键集合
     * @return 结果
     */
    int deleteMrDeviceByDeviceIds(Long[] deviceIds);

    /**
     * 删除设备管理信息
     *
     * @param deviceId 设备管理主键
     * @return 结果
     */
    int deleteMrDeviceByDeviceId(Long deviceId);

    /**
     * 更新设备心跳
     *
     * @param deviceId 设备id
     * @param time     时间
     * @return 结果
     */
    int updateHeartBeat(Long deviceId, String time);

    /**
     * 设备状态信息统计
     *
     * @param mrDevice 参数
     * @return 设备状态信息
     */
    List<OverviewReponse> overview(MrDevice mrDevice);


    /**
     * 导入设备数据
     *
     * @param deviceList    设备数据
     * @param updateSupport 是否更新
     * @param openName      操作者
     * @return 结果
     */
    String importDevice(List<MrDevice> deviceList, boolean updateSupport, String openName);

    /**
     * 批量更新设备信息
     *
     * @param mrDeviceList 设备信息
     */
    void bathUpdateMrDevice(List<MrDevice> mrDeviceList);

    /**
     * systemId 查询设备
     *
     * @param systemId systemId
     * @return 设备信息
     */
    MrDevice getDeviceBySystemId(String systemId);

    /**
     * 打印信息
     *
     * @param response response
     * @param mrDevice 参数
     */
    void printData(HttpServletResponse response, MrDevice mrDevice);

    List<TestMuteRecordVO> queryTestMuteRecord(MrDevice mrDevice);

    List<ByCategoryVO> byCategory(MrDevice mrDevice);

    List<MrDeviceVO> listByDeptIdAndModality(MrDevice mrDevice);
}
